<!doctype html>
<html>

<head>
    <title>Line Chart</title>
    <script src="../node_modules/moment/min/moment.min.js"></script>
    <script src="../Chart.js"></script>
    <script src="../node_modules/jquery/dist/jquery.min.js"></script>
    <style>
        canvas {
            -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, .5);
        }
    </style>
</head>

<body>
    <div style="width:100%;">
        <canvas id="canvas" style="width:100%;height:100%"></canvas>
    </div>
    <br>
    <br>
    <button id="randomizeData">Randomize Data</button>
    <button id="addDataset">Add Dataset</button>
    <button id="removeDataset">Remove Dataset</button>
    <button id="addData">Add Data</button>
    <button id="removeData">Remove Data</button>
    <div>
        <h3>Legend</h3>
        <div id="legendContainer">
        </div>
    </div>
    <script>
        var randomScalingFactor = function() {
            return Math.round(Math.random() * 100 * (Math.random() > 0.5 ? -1 : 1));
        };
        var randomColorFactor = function() {
            return Math.round(Math.random() * 255);
        };
        var randomColor = function(opacity) {
            return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')';
        };
        var newDate = function(days) {
            var date = new Date();
            return date.setDate(date.getDate() + days);
        };
        var newTimestamp = function(days) {
            return Date.now() - days * 100000;
        };

        var config = {
            type: 'bar',
            data: {
                //labels: [newTimestamp(0), newTimestamp(1), newTimestamp(2), newTimestamp(3), newTimestamp(4), newTimestamp(5), newTimestamp(6)], // unix timestamps
                // labels: [newDate(0), newDate(1), newDate(2), newDate(3), newDate(4), newDate(5), newDate(6)], // Date Objects
                labels: ["01/01/2015 20:00", "01/02/2015 20:00", "01/03/2015 22:00", "01/05/2015 23:00", "01/07/2015 03:00", "01/08/2015 10:00", "01/10/2015"], // Hours
                // labels: ["01/01/2015", "01/02/2015", "01/03/2015", "01/06/2015", "01/15/2015", "01/17/2015", "01/30/2015"], // Days
                // labels: ["12/25/2014", "01/08/2015", "01/15/2015", "01/22/2015", "01/29/2015", "02/05/2015", "02/12/2015"], // Weeks
                datasets: [{
                    type: 'bar',
                    label: 'Dataset 1',
                    backgroundColor: "rgba(151,187,205,0.5)",
                    data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()],
                    borderColor: 'white',
                    borderWidth: 2
                }, {
                    type: 'bar',
                    label: 'Dataset 2',
                    backgroundColor: "rgba(151,187,205,0.5)",
                    data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()],
                    borderColor: 'white',
                    borderWidth: 2
                }, {
                    type: 'line',
                    label: 'Dataset 3',
                    backgroundColor: "rgba(220,220,220,0.5)",
                    data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()]
                }, ]
            },
            options: {
                responsive: true,
                scales: {
                    xAxes: [{
                        type: "time",
                        display: true,
                        time: {
                            format: 'MM/DD/YYYY HH:mm',
                            // round: 'day'
                        }
                    }, ],
                    yAxes: [{
                        display: true
                    }]
                },
                elements: {
                    line: {
                        tension: 0.3
                    }
                },
            }
        };

        $.each(config.data.datasets, function(i, dataset) {
            dataset.borderColor = randomColor(0.4);
            dataset.backgroundColor = randomColor(0.5);
            dataset.pointBorderColor = randomColor(0.7);
            dataset.pointBackgroundColor = randomColor(0.5);
            dataset.pointBorderWidth = 1;
        });

        console.log(config.data);

        window.onload = function() {
            var ctx = document.getElementById("canvas").getContext("2d");
            window.myLine = new Chart(ctx, config);

            updateLegend();
        };

        function updateLegend() {
            $legendContainer = $('#legendContainer');
            $legendContainer.empty();
            $legendContainer.append(window.myLine.generateLegend());
        }

        $('#randomizeData').click(function() {
            $.each(config.data.datasets, function(i, dataset) {
                dataset.data = dataset.data.map(function() {
                    return randomScalingFactor();
                });
            });

            window.myLine.update();
            updateLegend();
        });

        $('#addDataset').click(function() {
            var newDataset = {
                label: 'Dataset ' + config.data.datasets.length,
                borderColor: randomColor(0.4),
                backgroundColor: randomColor(0.5),
                pointBorderColor: randomColor(0.7),
                pointBackgroundColor: randomColor(0.5),
                pointBorderWidth: 1,
                data: [],
            };

            for (var index = 0; index < config.data.labels.length; ++index) {
                newDataset.data.push(randomScalingFactor());
            }

            config.data.datasets.push(newDataset);
            window.myLine.update();
            updateLegend();
        });

        $('#addData').click(function() {
            if (config.data.datasets.length > 0) {
                config.data.labels.push(
                    myLine.scales['x-axis-0'].labelMoments[myLine.scales['x-axis-0'].labelMoments.length - 1].add(1, 'day')
                    .format('MM/DD/YYYY')
                );

                for (var index = 0; index < config.data.datasets.length; ++index) {
                    config.data.datasets[index].data.push(randomScalingFactor());
                }

                window.myLine.update();
                updateLegend();
            }
        });

        $('#removeDataset').click(function() {
            config.data.datasets.splice(0, 1);
            window.myLine.update();
            updateLegend();
        });

        $('#removeData').click(function() {
            config.data.labels.splice(-1, 1); // remove the label first

            config.data.datasets.forEach(function(dataset, datasetIndex) {
                config.data.datasets[datasetIndex].data.pop();
            });

            window.myLine.update();
            updateLegend();
        });
    </script>
</body>

</html>
